package com.yanghongyue.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yanghongyue.reggie.bean.Category;
import com.yanghongyue.reggie.common.R;
import com.yanghongyue.reggie.service.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 前端请求传递参数分类：
 * 1、普通参数
 * 直接在请求的方法中定义对应的变量获取就可以 注意参数名称要一致
 * 如果参数名称 可以使用@RequestParam("参数名")注解来进行映射
 * 2、json参数
 * json参数本质也是一个字符串、只是该字符串中可能是一个集合内容、或者是一个对象
 * 使用@RequestBody注解来将json数据转为自定义对象
 * 3、restFul参数
 * 前端传递的参数没有参数名称 直接在地址后拼接/参数值
 * 在请求地址后/{定义名字}占位符
 * 使用@PathVariable("名字")注解获取对应的参数
 */

@RestController
@RequestMapping("/category")
public class CategoryController {
    @Autowired
    private CategoryService categoryService;

    //分页查询
    @GetMapping("/page")
    public R<Page> page(Integer page, Integer pageSize) {

        //创建分页对象
        Page<Category> pageInfo = new Page<>(page, pageSize);
        //创建条件构造器
        QueryWrapper<Category> wrapper = new QueryWrapper<>();
        wrapper.orderByDesc("sort");
        //执行分页
        categoryService.page(pageInfo, wrapper);
        //返回数据
        return R.sucess(pageInfo);
    }

    //新增菜品分类
    @PostMapping
    public R<String> addfood(@RequestBody Category category) {

        //执行新增
        boolean save = categoryService.save(category);
        if (save) {
            return R.sucess("新增菜品分类成功");
        } else {
            return R.error("新增菜品分类失败");
        }
    }

    //修改菜品名称和排序(@RequestBody,参数JSON转为对象)
    @PutMapping
    public R<String> updatefood(@RequestBody Category category) {

        //执行修改
        boolean update = categoryService.updateById(category);
        if (update) {
            return R.sucess("修改菜品分类成功");
        } else {
            return R.error("修改菜品分类失败");
        }
    }

    //根据id删除菜品分类
    @DeleteMapping
    public R<String> deletefood(Long id) {
        //执行删除
        boolean remove = categoryService.removeById(id);
        if (remove) {
            return R.sucess("删除菜品分类成功");
        } else {
            return R.error("删除菜品分类失败");
        }
    }

    //根据type获取分类
    @GetMapping("/list")
    public R<List<Category>> list(Integer type) {

        QueryWrapper<Category> wrapper = new QueryWrapper<>();
        if (type != null) {
            wrapper.eq("type", type);
        }
        return R.sucess(categoryService.list(wrapper));
    }


}
